草庐IT

c++ - R 和 C++ 迭代

全部标签

c++ - 使用带有 char * 的正则表达式迭代器

我正在尝试将文件读入缓冲区,然后使用正则表达式迭代器。我知道我可以将C++字符串迭代器与正则表达式迭代器一起使用(构造函数是std::regex_iterator),但我想避免将缓冲区复制到字符串中并继续使用低级函数来读取文件(现在我使用open()和read())。structstatbuff;intfile=open(argv[1],O_RDONLY);if(!file)cout我认为我的选择是找到一种使用read()的方法使用C++字符串而不是char*或在char数组上使用正则表达式迭代器的方法。我可以写一个,但我也在努力让我的程序尽可能小。有什么办法可以做到吗?如何将C++字

c++ - {} 是传递给需要迭代器(代表某个容器的 std::end() )的函数的有效参数吗?

在boostdirectory_iteratorexample-howtolistdirectoryfilesnotrecursive(参见thisanswer)中是示例代码#include#include#include...usingnamespaceboost::filesystem;for(auto&entry:boost::make_iterator_range(directory_iterator(p),{})){std::cout(p是boost::filesystem::path类型。)在查看documentationformake_iterator_range时,我认

c++ - 定义数学函数并在/C++ 函数中求值

下面的伪代码描述了我想做的计算。这个想法是设计一个C/C++函数,它采用x的任何数学函数并计算前N项的总和。function(x)可以是任何函数,例如2x-1、2x、1/x等。x从zero到N不等。我认为挑战是如何设计function(x)数据结构,我不确定这是否可以在没有任何数据结构的情况下实现(这样会更好)。function(x)=2*x-1;sum_expression_to_N(function(x),N){floatsum=0.0;for(intx=0;x 最佳答案 您正在reshapestd::accumulate.(您

c++ - 具有递归模板参数包函数是否为每次迭代创建特定函数?

假设我使用参数包重新创建printf:voidprintf(constchar*string){std::coutvoidprintf(constchar*string,Tfirst,Params...p){while(*string!='\0'){if(*string=='%'&&*(string+1)!='%'){std::cout我使用以下参数调用该函数:printf("%distheanswertolife,theuniverse,andeverything.Pi=%f",42,3.14);编译器会创建2个具有不同签名的不同函数吗?printf(constchar*,int,P

c++ - 删除结束迭代器是对标准的疏忽还是设计决策?

标准库容器允许我们删除由迭代器first和last表示的范围。std::vectorbar;//firstitlastitbar.erase(bar.begin(),bar.end());标准规定first迭代器必须有效并且可解引用,而last只需要有效。但是,如果first==last则first不需要取消引用,因为erase是空操作。这意味着以下内容是合法的:bar.erase(bar.end(),bar.end());但是,如果我只想删除一个元素而不是一个范围,则迭代器必须是有效的并且可解引用,从而导致以下未定义的行为:bar.erase(bar.end());为什么这不只是空操

c++ - 一个函数可以同时接受迭代器和反向迭代器作为参数吗

下面的代码在第二个函数调用中给我错误。我怎样才能让我的函数同时接受iterator和reverse_iterator作为参数,而不是使用vector::reverse_iterator等参数类型创建第二个函数#includeusingnamespacestd;voidtraverse(vector::iteratorbegin,vector::iteratorend,vector::iteratorsbegin,vector::iteratorsend,string::iteratorabegin,string::iteratoraend){intlast=-1;autoi=begin

c++ - 模板函数中需要什么类型的迭代器?

我正在制作自己的基于计数排序的sort()算法。它对范围有限的正数进行排序。到目前为止,它适用于std::string和std::vector。原型(prototype)如下:templatevoidsortIntegers(ForwardIteratorstart,ForwardIteratorend)我的算法使用*iter=、++iter和copy=iter。来自http://www.cplusplus.com/reference/iterator/我确定我需要一个ForwardIterator或更好的。这是确定我的算法所需的最通用迭代器类型的正确方法吗?我不确定我是否应该尝试变得

c++ - 如何同时迭代两个 Boost 预处理器序列?

我想知道是否可以通过Boost预处理器序列完成以下操作。(大多数SO问题以及Boost预处理器示例仅讨论1个序列)#defineseq1(a)(b)(c)#defineseq2(1)(2)(3)//Nowiterateoverbothofthematthesametime这是我的动力。我必须为很多类型定义一些函数,例如voidadd(intval){obj.AddInt(val);}voidadd(doubleval){obj.AddDouble(val);}我正在考虑定义两个序列,例如#definetypes(int)(double)...#definefuncs(AddInt)(A

c++ - 为什么 erase-remove 习语不适用于反向迭代器

我的目标是尝试解决这个问题:Removingallemptyelementsinavectorfromend.使用erase-remove习语。想法是在给定的std::vector中删除从末尾开始的所有空元素(等于空白)字符串。当找到非空元素时,应停止删除元素。例子:vec={"","B","","D","E","","",""};删除后:vec={"","B","","D","E"};这是我尝试过的解决方案:#include#include#include#include#includeintmain(){std::vectorvec={"","B","","D","E","",""

c++ - C++ 中纯虚拟容器接口(interface)的迭代器

我有一个容器的纯虚拟接口(interface),它或多或少是这样的:classIContainer{public:virtual~IContainer()=default;virtualElement&operator[](size_tindex)=0;virtualconstElement&operator[](size_tindex)const=0;virtualsize_tsize()const=0;};我想使用rangefor循环,所以我需要定义begin()和end()。为此,我还需要定义迭代器类型。应该不是特别难,但是在我开始编写已经存在的东西之前,我想知道STL或Boos